/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package rna;

import java.util.ArrayList;

/**
 *
 * @author Igo Amauri
 */
public class FeedFoward {

    //Rede rede;
    ArrayList<Camadas> arrayCamadas = new ArrayList<Camadas>();
    double[] dadosCamadaDeEntrada;

//    public FeedFoward(ArrayList<Camadas> array, double[] dadosEntrada){
        //rede = redeCriada;
//        arrayCamadas = array;
//        dadosCamadaDeEntrada = dadosEntrada;
//    }

    public ArrayList<Camadas> executarFeedfoward(ArrayList<Camadas> array, double[] dadosEntrada, boolean flag){
        arrayCamadas = array;
        dadosCamadaDeEntrada = dadosEntrada;
                // Add um flag para distinguir a primeira rodada do feed das demais: problema com os pesos iniciais.


        for(int i = 0;i<arrayCamadas.size();i++){
            if(i==0){ // a primeira camada, camada de entrada
                arrayCamadas.get(i).setEntradas(dadosCamadaDeEntrada);
                

                //Atribuir os pesos a todos os neuronio de determinada camada
                if(flag){
                    for(int j=0;j<arrayCamadas.get(i).neuronios.size();j++){
                    arrayCamadas.get(i).neuronios.get(j).setPesosInicial();
                    }
                }
                arrayCamadas.get(i).getSaidas();
            }
            
            else{
                //Define as saidas e entradas das próximas camadas
                arrayCamadas.get(i).setEntradas(arrayCamadas.get(i-1).saidas);               

                //Atribuir os pesos a todos os neuronio de determinada camada
                if(flag){
                    for(int j=0;j<arrayCamadas.get(i).neuronios.size();j++){
                        arrayCamadas.get(i).neuronios.get(j).setPesosInicial();
                    }
                }
                arrayCamadas.get(i).getSaidas();
            }
        }
        //System.out.println("pesos de um?: " + arrayCamadas.get(1).neuronios.get(0).pesos);
        //System.out.println("pesos de dois?: " + arrayCamadas.get(1).neuronios.get(1).pesos);

//        double[] saida;
//        saida = arrayCamadas.get(2).getSaidas();
//        System.out.println("Saida da umatima camada: " + saida);
//        imprimirResultados();

        return arrayCamadas;
    }


    public void imprimirResultados(){

        

        for(int i=0; i< arrayCamadas.size();i++){
            System.out.println("------------------------------------------------");
            System.out.println("Entradas da Camada " + i);
            for(int j=0; j<arrayCamadas.get(i).entrada.length;j++){                
                System.out.println(arrayCamadas.get(i).entrada[j]);
            }
            System.out.println("Saidas da Camada " + i);
            for(int k=0;k< arrayCamadas.get(i).saidas.length;k++){

                System.out.println(arrayCamadas.get(i).saidas[k]);
        }
        }

    }

}
